/*****************************************************************************/ /*!
* file  : systask.c
* creat : apleilx
* note :  除初始化外，禁止该任务及其子程序使用含有阻塞的功能，包括数据存储，USB操作等等
* data  : 2019/07/02
*******************************************************************************/
#include "bsp.h"
#include "ff.h"
#include "os_obj.h"
#include "bsp_spi_nor.h"
#include "sys_task.h"
#include "common.h"
#include "file_afat_tab.h"

#include "bsp_api.h"
#include "bsp_spi_nor.h"
#include "nor_cmd.h"

#include "lut\nand_lut.h"
#include "nand_w25n.h"


#include "fat_file_opt.h"
#include "simp_fat_update.h"

/*****************************************************************************
* @brief   function
*****************************************************************************/
uint8_t simp_fat_update_check(char *fil_name);
uint8_t simp_fat_update_exec(char *fil_name);

/*****************************************************************************
* @brief   local var
*****************************************************************************/
sfat_ext_fil_type efat;

// 此数组为 key_code_sim 代码二进制值
// 作为固定键值，可以伪装为程序
const uint16_t ase_key_src[] =
	{
		0xf04f, 0x5000, 0x6801, 0x07ca,
		0xd500, 0xbf00, 0x6841, 0x078a,
		0xd500, 0xbf00, 0x6881, 0x074a,
		0xd500, 0xbf00, 0x68c0, 0x0701,
		0xd500, 0xbf00, 0x4770};

const uint8_t ase_key_ext[32] = {0};

/*****************************************************************************
* @brief   simp_fat_update_manage.
* @param   none
* @return  none
*****************************************************************************/
void simp_fat_update_manage(void)
{
	void *fat;
	
	if (sys_st.cmd.copy_sd_to_afat)
	{
		// 占用申请
		tx_mutex_get(os_obj.mid_file, TX_WAIT_FOREVER);

		// 转驱动
		fat = malloc(sizeof(FATFS));
		f_mount(fat, "0:", 1);
		f_chdrive("0:\0");

		// 配置
		efat.wr_block_size = 128 * 1024;
		efat.fsel = FSEL_MBED_H;
		efat.md5_en = 1;
		efat.sha_en = 1;
		// fil alloc
		efat.fil = malloc(sizeof(FIL));

		// check
		switch (sys_st.cmd.copy_sd_to_afat >> 4)
		{
		case 1:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed1.bin");
			else
				simp_fat_update_check("mbed1.bin");
			break;
		case 2:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed2.bin");
			else
				simp_fat_update_check("mbed2.bin");
			break;
		case 3:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed3.bin");
			else
				simp_fat_update_check("mbed3.bin");
			break;
		case 5:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed5.bin");
			else
				simp_fat_update_check("mbed5.bin");
			break;
		case 6:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed6.bin");
			else
				simp_fat_update_check("mbed6.bin");
			break;
		case 0:
			if (2 == (sys_st.cmd.copy_sd_to_afat & 0x0F))
				simp_fat_update_exec("mbed0.bin");
			else
				simp_fat_update_check("mbed0.bin");
			break;
		}

		// fil realse
		free(efat.fil);
		free(fat);
		
		f_mount(0, "0:", 1);
		tx_mutex_put(os_obj.mid_file);
	}

	sys_st.cmd.copy_sd_to_afat = 0;
}
